package com.lechi.web.vo;

import com.lechi.web.common.xss.Xss;
import jakarta.validation.constraints.*;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

/**
 * 读写指令配置对象 iot_device_cmd
 *
 * @author yangguang
 */
@Data
public class IotDeviceCmdVo {

    /**
     * 主键ID
     */
    private Long id;


    /**
     * 设备ID
     */
    @NotNull(message = "参数deviceId不能为空")
    private Long deviceId;

    /**
     * 设备观测要素外键
     */
    @NotNull(message = "参数sensorAliasId不能为空")
    private Long sensorAliasId;

    /**
     * 传感器别名
     */
    @Xss(message = "传感器别名不能包含脚本字符")
    private String sensorAliasName;

    /**
     * 从站地址
     */
    @Xss(message = "从站地址不能包含脚本字符")
    @NotBlank(message = "参数stationAddr不能为空")
    @Length(min = 2, max = 2, message = "从站地址长度必须2个字符的16进制字符")
    private String stationAddr;

    /**
     * 功能码
     */
    @Xss(message = "功能码不能包含脚本字符")
    @NotBlank(message = "参数functionCode不能为空")
    @Pattern(regexp = "^(03|04)$", message = "\"参数functionCode格式不正确")
    private String functionCode;

    /**
     * 偏置
     */
    @NotNull(message = "参数offsetCode不能为空")
    @Min(value = 0, message = "参数offsetCode必须为于{value}的整数值")
    private Integer offsetCode;

    /**
     * 数据格式
     */
    @Xss(message = "参数dataFormat不能包含脚本字符")
    @NotBlank(message = "参数dataFormat不能为空")
    @Pattern(regexp = "^(float32|float16|integer32|integer16)$", message = "参数dataFormat格式不正确")
    private String dataFormat;

    /**
     * 字节顺序
     */
    @Xss(message = "参数bitSort不能包含脚本字符")
    @NotBlank(message = "参数bitSort不能为空")
    @Pattern(regexp = "^(AB CD|CD AB)$", message = "参数bitSort格式不正确")
    private String bitSort;

    /**
     * 字节顺序
     */
    @Xss(message = "参数dataBit不能包含脚本字符")
    @Pattern(regexp = "^(byte|register)$", message = "参数dataBit格式不正确")
    private String dataBit;

    /**
     * 采集周期
     */
    @NotNull(message = "参数period不能为空")
    @Max(value = 60, message = "参数period最大不能超过{value}")
    @Min(value = 1, message = "参数period最小不能小于{value}")
    private Integer period;

    /**
     * 整型系数
     */
    @Min(value = 0, message = "参数period最小不能小于{value}")
    private Double intFactor;
}
